Spring JDBC এ NamedParameterJdbcTemplate ব্যবহার

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC)
103
103

NamedParameterJdbcTemplate Spring JDBC-র একটি ক্লাস, যা ডেটাবেসে কুয়েরি এক্সিকিউট করার সময় নামের ভিত্তিতে প্যারামিটার (Named Parameters) ব্যবহার করতে দেয়। এটি কোডের পাঠযোগ্যতা ও ম্যানেজেবিলিটি বাড়ায়, বিশেষ করে যখন অনেকগুলো প্যারামিটার ব্যবহার করা হয়।


NamedParameterJdbcTemplate কেন ব্যবহার করবেন?

  1. Readable Queries: কুয়েরির প্রতিটি প্যারামিটার নাম দিয়ে চিহ্নিত হয়, ফলে কোড আরও রিডেবল হয়।
  2. Flexible Parameter Binding: প্যারামিটারগুলির ক্রম অনুসরণ করার প্রয়োজন হয় না।
  3. Reusable Parameters: একটি প্যারামিটার একাধিক স্থানে ব্যবহার করা যায়।
  4. Support for Complex Objects: Map বা Bean-এর সাহায্যে প্যারামিটার পাস করা যায়।

NamedParameterJdbcTemplate ব্যবহার করার ধাপসমূহ

১. Maven Dependency যোগ করুন

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.11</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>

২. DataSource সেটআপ করুন

import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

public class DataSourceConfig {
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
        dataSource.setUsername("your_username");
        dataSource.setPassword("your_password");
        return dataSource;
    }
}

৩. NamedParameterJdbcTemplate কনফিগার করুন

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

public class NamedParameterJdbcTemplateConfig {
    private final NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public NamedParameterJdbcTemplateConfig(DataSource dataSource) {
        this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    }

    public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
        return namedParameterJdbcTemplate;
    }
}

৪. NamedParameterJdbcTemplate দিয়ে কুয়েরি চালানো

(ক) Insert Query

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;

public class InsertExample {
    public static void main(String[] args) {
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        NamedParameterJdbcTemplateConfig jdbcConfig = new NamedParameterJdbcTemplateConfig(dataSourceConfig.getDataSource());
        NamedParameterJdbcTemplate jdbcTemplate = jdbcConfig.getNamedParameterJdbcTemplate();

        String sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
        
        MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue("name", "John Doe");
        params.addValue("email", "john@example.com");

        int rowsAffected = jdbcTemplate.update(sql, params);
        System.out.println("Rows Inserted: " + rowsAffected);
    }
}

(খ) Update Query

public class UpdateExample {
    public static void main(String[] args) {
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        NamedParameterJdbcTemplateConfig jdbcConfig = new NamedParameterJdbcTemplateConfig(dataSourceConfig.getDataSource());
        NamedParameterJdbcTemplate jdbcTemplate = jdbcConfig.getNamedParameterJdbcTemplate();

        String sql = "UPDATE users SET email = :email WHERE name = :name";

        MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue("name", "John Doe");
        params.addValue("email", "john.doe@example.com");

        int rowsAffected = jdbcTemplate.update(sql, params);
        System.out.println("Rows Updated: " + rowsAffected);
    }
}

(গ) Select Query

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;

public class SelectExample {
    public static void main(String[] args) {
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        NamedParameterJdbcTemplateConfig jdbcConfig = new NamedParameterJdbcTemplateConfig(dataSourceConfig.getDataSource());
        NamedParameterJdbcTemplate jdbcTemplate = jdbcConfig.getNamedParameterJdbcTemplate();

        String sql = "SELECT * FROM users WHERE name = :name";

        MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue("name", "John Doe");

        User user = jdbcTemplate.queryForObject(sql, params, new BeanPropertyRowMapper<>(User.class));

        System.out.println("User Name: " + user.getName());
        System.out.println("User Email: " + user.getEmail());
    }
}

(ঘ) Batch Update Query

import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;

import java.util.ArrayList;
import java.util.List;

public class BatchInsertExample {
    public static void main(String[] args) {
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        NamedParameterJdbcTemplateConfig jdbcConfig = new NamedParameterJdbcTemplateConfig(dataSourceConfig.getDataSource());
        NamedParameterJdbcTemplate jdbcTemplate = jdbcConfig.getNamedParameterJdbcTemplate();

        String sql = "INSERT INTO users (name, email) VALUES (:name, :email)";

        List<User> users = new ArrayList<>();
        users.add(new User("Alice", "alice@example.com"));
        users.add(new User("Bob", "bob@example.com"));

        SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(users.toArray());

        int[] rowsAffected = jdbcTemplate.batchUpdate(sql, batch);
        System.out.println("Batch Inserted Rows: " + rowsAffected.length);
    }
}

Key Classes এবং Interfaces:

  1. MapSqlParameterSource:
    • একটি ম্যাপ (key-value pair) ব্যবহার করে প্যারামিটার পাস করার জন্য।
  2. SqlParameterSourceUtils:
    • ব্যাচ প্রসেসিংয়ের সময় সহজে প্যারামিটার ম্যাপ করতে সাহায্য করে।
  3. NamedParameterJdbcTemplate:
    • কুয়েরিতে নাম ভিত্তিক প্যারামিটার ব্যবহারের প্রধান ক্লাস।

NamedParameterJdbcTemplate এর সুবিধা:

  1. Readable এবং Maintainable:
    • প্যারামিটার নাম ব্যবহার করে কোডের পাঠযোগ্যতা বৃদ্ধি করে।
  2. Flexible Binding:
    • প্যারামিটারগুলির ক্রম অনুসরণ করার প্রয়োজন নেই।
  3. Complex Queries Support:
    • জটিল কুয়েরি এবং ব্যাচ প্রসেসিং সহজে করা যায়।

NamedParameterJdbcTemplate vs JdbcTemplate:

FeatureJdbcTemplateNamedParameterJdbcTemplate
Parameter StyleIndexed Parameters (?)Named Parameters (:paramName)
Readabilityকম (Parameter index দেখতে হয়)বেশি (Parameter name দেখে বোঝা যায়)
Complex ObjectsBean বা Map সমর্থন করে নাBean বা Map সহজেই সমর্থন করে
Batch ProcessingBatchArguments প্রয়োজনSqlParameterSourceUtils সহজে সমর্থন করে

উপসংহার:
NamedParameterJdbcTemplate Spring JDBC-এর একটি শক্তিশালী টুল যা সহজে ব্যবহারযোগ্য এবং কোডের মেইনটেইনেবিলিটি বাড়ায়। জটিল কুয়েরি এবং ব্যাচ প্রসেসিংয়ের জন্য এটি JdbcTemplate এর চেয়ে উন্নত বিকল্প।

Content added By

NamedParameterJdbcTemplate কি এবং কেন এটি ব্যবহার করা হয়?

66
66

NamedParameterJdbcTemplate স্প্রিং জেডিবিসি (Spring JDBC) এর একটি গুরুত্বপূর্ণ ক্লাস, যা SQL কুয়েরিতে নামকৃত প্যারামিটার ব্যবহার করার সুবিধা প্রদান করে। এটি সাধারণ JdbcTemplate এর উন্নত সংস্করণ, যেখানে প্যারামিটারাইজড কুয়েরি তৈরির সময় নামকৃত প্যারামিটার (Named Parameters) ব্যবহার করা যায়, যা কোডকে আরও পাঠযোগ্য, সহজ এবং ভুলমুক্ত করে তোলে।

NamedParameterJdbcTemplate কি?

NamedParameterJdbcTemplate একটি ক্লাস যা স্প্রিং জেডিবিসি ফ্রেমওয়ার্কের অংশ। এটি JdbcTemplate এর মত কাজ করে, তবে এটি SQL কুয়েরি এক্সিকিউট করার সময় প্যারামিটারাইজড কুয়েরিতে নামকৃত প্যারামিটার ব্যবহার করার সুযোগ দেয়। এর মাধ্যমে SQL কুয়েরি লেখার সময় প্যারামিটারগুলি নাম দ্বারা চিহ্নিত করা হয়, যেমন :param1, :param2, ইত্যাদি।

NamedParameterJdbcTemplate এর সুবিধাসমূহ:

  1. পাঠযোগ্য কোড: নামকৃত প্যারামিটার ব্যবহার করার মাধ্যমে কোডটি আরও পরিষ্কার এবং পাঠযোগ্য হয়। সাধারণত, প্যারামিটার মানগুলি ? চিহ্ন দ্বারা স্থাপন করা হয়, কিন্তু নামকৃত প্যারামিটার ব্যবহার করলে প্রতিটি প্যারামিটার কী কাজ করছে তা সহজে বোঝা যায়।
  2. ভুল হওয়া কম: যখন অনেক প্যারামিটার থাকে, তখন ? প্যারামিটারগুলো সঠিকভাবে ব্যবহার করা কঠিন হতে পারে। নামকৃত প্যারামিটার ব্যবহার করলে প্যারামিটারগুলোর অবস্থান ও অর্থ স্পষ্ট হয়ে ওঠে, ফলে ভুল হওয়ার সম্ভাবনা কমে।
  3. উন্নত প্যারামিটারাইজড কুয়েরি: যদি SQL কুয়েরিতে অনেক প্যারামিটার থাকে এবং তাদের অবস্থান নির্দিষ্টভাবে জানানো প্রয়োজন হয়, তাহলে নামকৃত প্যারামিটার সহজ এবং দক্ষ উপায় হিসেবে কাজ করে।
  4. ডাইনামিক কুয়েরি নির্মাণ: এটি ডাইনামিক SQL কুয়েরি তৈরি করতে সহায়তা করে, যেখানে প্যারামিটারগুলোর মান ডাইনামিকভাবে নির্ধারণ করা হয় এবং কুয়েরি চালানো হয়।

NamedParameterJdbcTemplate ব্যবহার করার উদাহরণ:

ধরা যাক, আমাদের একটি Employee টেবিল থেকে কিছু ডেটা পড়তে হবে যেখানে id এবং name প্যারামিটার হিসেবে ব্যবহার করা হবে।

১. কনফিগারেশন:

প্রথমে, NamedParameterJdbcTemplate এবং ডেটাবেস সংযোগ সেটআপ করা প্রয়োজন।

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

public class DataSourceConfig {

    public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
        DataSource dataSource = dataSource();
        return new NamedParameterJdbcTemplate(dataSource);
    }

    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }
}

২. NamedParameterJdbcTemplate এর ব্যবহার:

এখন, NamedParameterJdbcTemplate ব্যবহার করে SQL কুয়েরি এক্সিকিউট করা হবে।

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import java.util.List;
import java.util.Map;

public class EmployeeDao {

    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public void setNamedParameterJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
        this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
    }

    public List<Employee> getEmployeesByIdAndName(int id, String name) {
        String sql = "SELECT * FROM Employee WHERE id = :id AND name = :name";
        
        MapSqlParameterSource parameters = new MapSqlParameterSource();
        parameters.addValue("id", id);
        parameters.addValue("name", name);

        return namedParameterJdbcTemplate.query(sql, parameters, new EmployeeRowMapper());
    }
}

৩. RowMapper:

এখানে EmployeeRowMapper হল একটি কাস্টম ক্লাস যা RowMapper ইন্টারফেস ইমপ্লিমেন্ট করে, যেটি SQL কুয়েরি থেকে প্রাপ্ত রেকর্ডকে Employee অবজেক্টে ম্যাপ করবে।

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

public class EmployeeRowMapper implements RowMapper<Employee> {

    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setName(rs.getString("name"));
        // আরও প্রপার্টি সেট করুন
        return employee;
    }
}

কেন NamedParameterJdbcTemplate ব্যবহার করা হয়?

  1. নামকৃত প্যারামিটার: SQL কুয়েরি লেখার সময় ? ব্যবহার না করে নামকৃত প্যারামিটার যেমন :id, :name ব্যবহার করতে পারা যায়, যা কোডের পাঠযোগ্যতা বাড়ায়।
  2. নির্ভুল প্যারামিটার মান: যখন SQL কুয়েরিতে অনেক প্যারামিটার থাকে, তখন নামকৃত প্যারামিটার ব্যবহার করে তাদের অবস্থান ভুল হওয়ার সম্ভাবনা কমে।
  3. ডাইনামিক কুয়েরি: এটি ডাইনামিক SQL কুয়েরি তৈরিতে সহায়ক, যেখানে প্যারামিটারগুলোর মান কনফিগারেবল হয় এবং নির্দিষ্ট কুয়েরি তৈরি করা হয়।

সারাংশ:

NamedParameterJdbcTemplate স্প্রিং জেডিবিসির একটি শক্তিশালী ক্লাস যা SQL কুয়েরিতে নামকৃত প্যারামিটার ব্যবহারের সুবিধা প্রদান করে। এটি কোডের পাঠযোগ্যতা এবং ডাইনামিক SQL কুয়েরি নির্মাণে সহায়ক। যখন SQL কুয়েরিতে অনেক প্যারামিটার থাকে, তখন এটি ব্যবহারের মাধ্যমে কোড সহজ এবং ভুলমুক্ত করা যায়।

Content added By

Named Parameters এবং SqlParameterSource এর ব্যবহার

77
77

Spring JDBC-এ Named Parameters এবং SqlParameterSource ব্যবহার করা হয় SQL কোয়েরি বা আপডেট অপারেশনে প্যারামিটার পাঠানোর জন্য। এটি প্যারামিটারাইজড কোয়েরির ব্যবহারে অনেক সুবিধা প্রদান করে এবং কোডকে আরও পরিষ্কার, পাঠযোগ্য এবং নিরাপদ করে তোলে।

Named Parameters

Named Parameters হল SQL কোয়েরির মধ্যে প্যারামিটারকে নাম দিয়ে উল্লেখ করার পদ্ধতি। সাধারণত, JDBC এ প্যারামিটার বসানোর জন্য ? ব্যবহার করা হয়, কিন্তু Named Parameters ব্যবহার করলে প্যারামিটারগুলোকে নাম দিয়ে উল্লেখ করা যায়, যা কোডের পাঠযোগ্যতা বৃদ্ধি করে এবং SQL ইনজেকশনের ঝুঁকি কমায়।

Spring JDBC-এ NamedParameterJdbcTemplate ব্যবহার করা হয় Named Parameters এর সাথে কাজ করতে।

SqlParameterSource

SqlParameterSource একটি ইন্টারফেস যা প্যারামিটার মানগুলি সরবরাহ করে। NamedParameterJdbcTemplate ক্লাস এই ইন্টারফেসটি ব্যবহার করে নামকৃত প্যারামিটারগুলোর মানগুলিকে ম্যানেজ করে।

Spring JDBC-এ NamedParameterJdbcTemplate এবং SqlParameterSource ব্যবহার করার উদাহরণ নিচে দেখানো হলো।


উদাহরণ ১: Named Parameters এর ব্যবহার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class UserRepository {

    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    // Method to get users by age range using named parameters
    public List<User> getUsersByAgeRange(int minAge, int maxAge) {
        String sql = "SELECT * FROM users WHERE age BETWEEN :minAge AND :maxAge";

        MapSqlParameterSource parameters = new MapSqlParameterSource();
        parameters.addValue("minAge", minAge);
        parameters.addValue("maxAge", maxAge);

        return namedParameterJdbcTemplate.query(sql, parameters, new UserRowMapper());
    }
}

এখানে:

  • SQL কোয়েরিতে :minAge এবং :maxAge নামে প্যারামিটার ব্যবহার করা হয়েছে।
  • MapSqlParameterSource ব্যবহার করে প্যারামিটারগুলোর মান (যেমন minAge এবং maxAge) সেট করা হয়েছে।
  • NamedParameterJdbcTemplate ব্যবহার করে কোয়েরি চালানো হয়েছে, যা নামকৃত প্যারামিটারগুলি সমর্থন করে।

উদাহরণ ২: SqlParameterSource এর ব্যবহার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {

    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    // Method to update user details using named parameters
    public int updateUser(int userId, String userName, String email) {
        String sql = "UPDATE users SET user_name = :userName, email = :email WHERE user_id = :userId";

        SqlParameterSource parameters = new MapSqlParameterSource()
                .addValue("userId", userId)
                .addValue("userName", userName)
                .addValue("email", email);

        return namedParameterJdbcTemplate.update(sql, parameters);
    }
}

এখানে:

  • SQL কোয়েরিতে :userId, :userName, এবং :email নামে প্যারামিটার ব্যবহার করা হয়েছে।
  • MapSqlParameterSource এর মাধ্যমে SQL প্যারামিটারগুলো সেট করা হয়েছে।
  • namedParameterJdbcTemplate.update() মেথডটি ব্যবহার করে SQL কোয়েরি আপডেট করা হয়েছে।

NamedParameterJdbcTemplate এবং SqlParameterSource এর কার্যকারিতা

  1. NamedParameterJdbcTemplate:
    • এটি Spring JDBC টেমপ্লেটের একটি বিশেষায়িত সংস্করণ যা নামকৃত প্যারামিটারগুলির সাথে কাজ করে।
    • এটি JdbcTemplate এর মতো কাজ করে, তবে এটি প্যারামিটারগুলির নাম ব্যবহার করে SQL কোয়েরি বা আপডেট অপারেশন পরিচালনা করতে সহায়তা করে।
  2. MapSqlParameterSource:
    • এটি SqlParameterSource ইন্টারফেসের একটি ইমপ্লিমেন্টেশন। এটি প্যারামিটার নাম এবং তাদের মান সংরক্ষণ করতে ব্যবহৃত হয়।
    • এটি addValue() মেথডের মাধ্যমে প্যারামিটার যোগ করতে সহায়তা করে, যেখানে প্যারামিটার নাম এবং মান নির্ধারণ করা হয়।
  3. SQL Injection থেকে নিরাপত্তা:
    • Named Parameters ব্যবহার করার অন্যতম সুবিধা হলো এটি SQL ইনজেকশনের আক্রমণ থেকে সুরক্ষা প্রদান করে, কারণ প্যারামিটারগুলি নামের মাধ্যমে নির্ধারণ করা হয় এবং এটি স্বয়ংক্রিয়ভাবে সঠিকভাবে escaped হয়ে যায়।

উপসংহার

  • Named Parameters ব্যবহার করলে SQL কোড আরো পরিষ্কার এবং পাঠযোগ্য হয়, এবং এটি SQL ইনজেকশন রোধে সহায়তা করে।
  • SqlParameterSource (যেমন MapSqlParameterSource) প্যারামিটারগুলোর মান রাখার জন্য একটি ইন্টারফেস প্রদান করে এবং NamedParameterJdbcTemplate এর সাথে খুব সহজে ইন্টিগ্রেট করা যায়।

এভাবে Spring JDBC-এ Named Parameters এবং SqlParameterSource ব্যবহার করা কোডকে আরো মেনটেনেবল এবং নিরাপদ করে তোলে।

Content added By

উদাহরণ সহ NamedParameterJdbcTemplate এর ব্যবহার

70
70

Spring JDBC-এ NamedParameterJdbcTemplate একটি বিশেষ ধরনের JdbcTemplate যা SQL কোয়েরি লেখার সময় নামকৃত প্যারামিটার ব্যবহার করতে সহায়ক। এটি কোডটি আরও পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য করে তোলে, কারণ SQL স্টেটমেন্টে প্যারামিটারগুলি নাম দিয়ে উল্লেখ করা হয়, না যে তাদের অবস্থান (position) দিয়ে।

NamedParameterJdbcTemplate ব্যবহার করার জন্য SQL কোয়েরিতে নামকৃত প্যারামিটার ব্যবহার করতে হবে এবং সেই প্যারামিটারগুলির মান Map বা SqlParameterSource এর মাধ্যমে সরবরাহ করতে হবে।

উদাহরণ:

ধরা যাক, আমাদের একটি Employee টেবিল রয়েছে যার মধ্যে id, name, এবং salary ফিল্ড রয়েছে। আমাদের একটি SQL কোয়েরি ব্যবহার করে NamedParameterJdbcTemplate এর মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট এবং সিলেক্ট করার উদাহরণ নিচে দেখানো হলো।

১. Maven ডিপেনডেন্সি:

প্রথমে, আপনাকে Spring JDBC এবং Spring Context ডিপেনডেন্সি আপনার pom.xml ফাইলে যুক্ত করতে হবে (যদি না থাকে)।

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.24</version> <!-- সর্বশেষ সংস্করণ নিশ্চিত করতে Maven Repository থেকে চেক করুন -->
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.24</version>
</dependency>

২. NamedParameterJdbcTemplate ব্যবহার করার উদাহরণ:

২.১ DataSource কনফিগারেশন:

প্রথমে DataSource কনফিগারেশন করতে হবে। এই উদাহরণে, আমরা HikariCP ব্যবহার করছি, তবে আপনি Tomcat Connection Pool বা অন্য কোন পুল ব্যবহার করতে পারেন।

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/your_database");
        hikariConfig.setUsername("your_username");
        hikariConfig.setPassword("your_password");
        hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
        
        return new HikariDataSource(hikariConfig);
    }
}
২.২ NamedParameterJdbcTemplate কনফিগারেশন:

NamedParameterJdbcTemplate ক্লাসকে একটি JdbcTemplate এর বিকল্প হিসেবে ব্যবহার করা হয়। এতে SQL কোয়েরিতে প্যারামিটারগুলি নামের মাধ্যমে উল্লেখ করা হয়।

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class EmployeeDAO {

    private final NamedParameterJdbcTemplate jdbcTemplate;

    @Autowired
    public EmployeeDAO(DataSource dataSource) {
        this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    }

    // Employee ইনসার্ট করার জন্য
    public void addEmployee(int id, String name, double salary) {
        String sql = "INSERT INTO Employee (id, name, salary) VALUES (:id, :name, :salary)";
        
        MapSqlParameterSource parameters = new MapSqlParameterSource();
        parameters.addValue("id", id);
        parameters.addValue("name", name);
        parameters.addValue("salary", salary);
        
        jdbcTemplate.update(sql, parameters);
    }

    // সমস্ত Employee পড়ার জন্য
    public List<Employee> getAllEmployees() {
        String sql = "SELECT * FROM Employee";
        
        return jdbcTemplate.query(sql, new EmployeeRowMapper());
    }
}
২.৩ RowMapper তৈরি করা:

NamedParameterJdbcTemplate এর মাধ্যমে সিলেক্ট কোয়েরি চালানোর সময় আমরা RowMapper ব্যবহার করে রেজাল্ট সেটকে Employee অবজেক্টে রূপান্তর করি।

import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;

public class EmployeeRowMapper implements RowMapper<Employee> {

    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setName(rs.getString("name"));
        employee.setSalary(rs.getDouble("salary"));
        return employee;
    }
}
২.৪ Employee ক্লাস:

এখন, Employee ক্লাসটি তৈরি করি, যেখানে id, name, এবং salary ফিল্ড থাকবে।

public class Employee {

    private int id;
    private String name;
    private double salary;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

৩. SQL কোয়েরি এবং Named Parameters:

  • SQL কোয়েরিতে প্যারামিটারগুলির নামটি :id, :name, এবং :salary এর মতো হবে।
  • MapSqlParameterSource ব্যবহার করে এই নামকৃত প্যারামিটারগুলির মান পাস করা হয়।
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", id);
parameters.addValue("name", name);
parameters.addValue("salary", salary);

৪. ব্যবহার:

এখন আপনি EmployeeDAO ক্লাসটি ব্যবহার করে ডেটাবেসে ডেটা ইনসার্ট এবং সিলেক্ট করতে পারবেন।

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {
        // Spring কনটেক্সট ইনিশিয়ালাইজ করা
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DataSourceConfig.class);

        EmployeeDAO employeeDAO = context.getBean(EmployeeDAO.class);

        // নতুন Employee ইনসার্ট করা
        employeeDAO.addEmployee(1, "John Doe", 50000);

        // সমস্ত Employee পড়া
        List<Employee> employees = employeeDAO.getAllEmployees();
        employees.forEach(employee -> System.out.println(employee.getName()));

        context.close();
    }
}

উপসংহার:

  • NamedParameterJdbcTemplate ব্যবহার করার সুবিধা হল SQL কোয়েরি আরও পাঠযোগ্য হয় এবং প্যারামিটারগুলির নাম সরাসরি কোডে উল্লেখ করা যায়।
  • এটি দীর্ঘ সময়ের জন্য রক্ষণাবেক্ষণের ক্ষেত্রে সহায়ক, কারণ কোডটি আরো স্পষ্ট এবং সহজ হয়।

এই উদাহরণটি দেখিয়েছে কিভাবে Spring JDBC তে NamedParameterJdbcTemplate ব্যবহার করে প্যারামিটারাইজড SQL কোয়েরি পরিচালনা করা যায়।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion